package com.tepth.remote.control.delegate.apply.create;

import com.tepth.remote.control.base.mvp.BaseModel;
import com.tepth.remote.control.base.mvp.BasePresenter;
import com.tepth.remote.control.base.mvp.BaseView;
import com.tepth.remote.core.net.callback.IError;
import com.tepth.remote.core.net.callback.ISoapSuccess;

import java.util.WeakHashMap;

/**
 * Description:
 *
 * @author Hequn.Lee
 * @date 2018/11/24
 */
public interface ApplyCreateContract {
    interface View extends BaseView {
        /**
         * 获取请假配置信息成功
         *
         * @param result 配置信息
         */
        void getExaminationSuccess(WeakHashMap<String, String> result);

        /**
         * 获取请假配置信息失败
         *
         * @param code 错误码
         * @param msg  错误信息
         */
        void getExaminationFailed(int code, String msg);

        /**
         * 提交请假申请成功
         */
        void submitApplySuccess();

        /**
         * 提交请假申请失败
         *
         * @param code 错误码
         * @param msg  错误信息
         */
        void submitApplyFailed(int code, String msg);
    }

    interface Model extends BaseModel {
        /**
         * 请假
         *
         * @param params     参数集合
         * @param methodName 方法名
         * @param nameSpace  命名空间
         * @param success    成功回调
         * @param error      错误回调
         */
        void onApply(WeakHashMap<String, Object> params,
                     String methodName,
                     String nameSpace,
                     ISoapSuccess success,
                     IError error);
    }

    abstract class AbstractPresenter extends BasePresenter {

        /**
         * 获取请假配置信息
         */
        abstract void getExamination();

        /**
         * 提交请假申请
         *
         * @param projectId     项目ID
         * @param examinationId 请假ID
         * @param startDate     开始时间
         * @param endDate       结束时间
         * @param reason        请假理由
         */
        abstract void submitApply(int projectId, String examinationId, String startDate, String endDate, String reason);
    }
}
